/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package espe.ccsoft.controllers;

import espe.ccsoft.controllers.utils.JsfUtil;
import espe.ccsoft.controllers.utils.Mensajes;
import espe.ccsoft.controllers.utils.PaginationHelper;
import espe.ccsoft.controllers.utils.Validaciones;
import espe.ccsoft.dao.RutaDao;
import espe.ccsoft.models.Ruta;
import java.util.List;
import java.util.ResourceBundle;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

/**
 *
 * @author Carlos
 */
@ManagedBean
@RequestScoped
public class RutaController {

    private Ruta ruta;
    private PaginationHelper pagination;
    private RutaDao rutaDao;
    private int selectedItemIndex;
    private DataModel items = null;
    String realPath = "";
    Mensajes mensaje;
    Validaciones validaciones;

    public RutaController() {
        mensaje = new Mensajes();
        validaciones = new Validaciones();
    }
    
    

    public Ruta getSelected() {
        if (ruta == null) {
            ruta = new Ruta();
            selectedItemIndex = -1;
        }
        return ruta;
    }

    public RutaDao getRutaDao() {
        rutaDao = new RutaDao();
        return rutaDao;
    }

    public final String crearRuta() throws Exception {

        RutaDao dao = new RutaDao();
        Ruta rutaTmp = dao.findByNombre(ruta.getCodigo());
        try {
            if (rutaTmp == null) {
                for (int i = 0; i < 3; i++) {

                    if (i == 0) {
                        ruta.setTipoDia("Ordinario");
                        ruta.setInicioHora(ruta.getInicioHoraOrd());
                        ruta.setNumBuses(ruta.getNumBusesOrd());
                        ruta.setFinHora(ruta.getFinHoraOrd());
                        dao.insert(ruta);
                    }

                    if (i == 1) {
                        ruta.setTipoDia("Sábado");
                        ruta.setInicioHora(ruta.getInicioHoraSab());
                        ruta.setNumBuses(ruta.getNumBusesSab());
                        ruta.setFinHora(ruta.getFinHoraSab());
                        dao.insert(ruta);
                    }

                    if (i == 2) {
                        ruta.setTipoDia("Domingo");
                        ruta.setInicioHora(ruta.getInicioHoraDom());
                        ruta.setNumBuses(ruta.getNumBusesDom());
                        ruta.setFinHora(ruta.getFinHoraDom());
                        dao.insert(ruta);
                    }

                }

                mensaje.addMessageSuccefull("Registro exitoso!", "La ruta fue registrada correctamente.");
                return "Index";
            } else {
                mensaje.addMessageError("Registro fallido!", "La ruta ya se encuentra registrada.");
                return null;
            }
        } catch (Exception e) {
            return "/Error";
        }
    }

    public String modificarRuta() throws Exception {
        RutaDao dao = new RutaDao();
        dao.update(ruta);
        mensaje.addMessageSuccefull("Modificación exitosa!", "Ruta modificada con éxito.");        
        return "Index";
    }

    public DataModel getItems() {
        if (items == null) {
            items = getPagination().createPageDataModel();
        }
        return items;
    }

    public PaginationHelper getPagination() {
        if (pagination == null) {
            pagination = new PaginationHelper(10) {

                @Override
                public int getItemsCount() {
                    try {
                        return getRutaDao().findAllDistinct().size();
                    } catch (Exception ex) {
                        return 0;
                    }
                }

                @Override
                public DataModel createPageDataModel() {
                    try {
                        return new ListDataModel(getRutaDao().findAllDistinct());
                    } catch (Exception ex) {
                        return new ListDataModel();
                    }
                }
            };
        }
        return pagination;
    }

    public final String cargarCrearRuta() {
        ruta = new Ruta();
        selectedItemIndex = -1;
        return "Crear";
    }

    public final String cargarDetalleRuta(int codigo_ruta) throws Exception {
        ruta = getRutaDao().findByPK(codigo_ruta);
        return "Detalle";
    }
    
    public final String cargarModificarRuta(int codigo_ruta) throws Exception {
        ruta = getRutaDao().findByPK(codigo_ruta);
        return "Modificar";
    }

    public List<Ruta> getRutasDisponibles() throws Exception {
        return getRutaDao().findAll();
    }

}
